package com.wngbms.netty._10tcp.server;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.CharsetUtil;
import lombok.extern.slf4j.Slf4j;

import java.util.UUID;

/**
 * 服务器接收到消息量count:1 服务器接收到数据 hello,server0
 * 服务器接收到消息量count:2 服务器接收到数据 hello,server1
 * 服务器接收到消息量count:3 服务器接收到数据 hello,server2hello,server3hello,server4
 * 服务器接收到消息量count:4 服务器接收到数据 hello,server5hello,server6
 * 服务器接收到消息量count:5 服务器接收到数据 hello,server7hello,server8
 * 服务器接收到消息量count:6 服务器接收到数据 hello,server9hello,server10
 * 服务器接收到消息量count:7 服务器接收到数据 hello,server11hello,server12hello,server13
 * 服务器接收到消息量count:8 服务器接收到数据 hello,server14hello,server15
 * 服务器接收到消息量count:9 服务器接收到数据 hello,server16hello,server17
 * 服务器接收到消息量count:10 服务器接收到数据 hello,server18hello,server19hello,server20
 * 服务器接收到消息量count:11 服务器接收到数据 hello,server21hello,server22
 * 服务器接收到消息量count:12 服务器接收到数据 hello,server23hello,server24
 * 服务器接收到消息量count:13 服务器接收到数据 hello,server25hello,server26
 * 服务器接收到消息量count:14 服务器接收到数据 hello,server27hello,server28hello,server29hello,server30
 * 服务器接收到消息量count:15 服务器接收到数据 hello,server31hello,server32hello,server33
 * 服务器接收到消息量count:16 服务器接收到数据 hello,server34hello,server35
 * 服务器接收到消息量count:17 服务器接收到数据 hello,server36hello,server37
 * 服务器接收到消息量count:18 服务器接收到数据 hello,server38hello,server39
 * 服务器接收到消息量count:19 服务器接收到数据 hello,server40hello,server41
 * 服务器接收到消息量count:20 服务器接收到数据 hello,server42hello,server43
 * 服务器接收到消息量count:21 服务器接收到数据 hello,server44
 * 服务器接收到消息量count:22 服务器接收到数据 hello,server45hello,server46
 * 服务器接收到消息量count:23 服务器接收到数据 hello,server47hello,server48hello,server49
 * 服务器接收到消息量count:24 服务器接收到数据 hello,server50hello,server51
 * 服务器接收到消息量count:25 服务器接收到数据 hello,server52hello,server53
 * 服务器接收到消息量count:26 服务器接收到数据 hello,server54
 * 服务器接收到消息量count:27 服务器接收到数据 hello,server55hello,server56hello,server57hello,server58
 * 服务器接收到消息量count:28 服务器接收到数据 hello,server59
 * 服务器接收到消息量count:29 服务器接收到数据 hello,server60
 * 服务器接收到消息量count:30 服务器接收到数据 hello,server61
 * 服务器接收到消息量count:31 服务器接收到数据 hello,server62
 * 服务器接收到消息量count:32 服务器接收到数据 hello,server63hello,server64hello,server65
 * 服务器接收到消息量count:33 服务器接收到数据 hello,server66hello,server67
 * 服务器接收到消息量count:34 服务器接收到数据 hello,server68hello,server69hello,server70
 * 服务器接收到消息量count:35 服务器接收到数据 hello,server71hello,server72
 * 服务器接收到消息量count:36 服务器接收到数据 hello,server73hello,server74
 * 服务器接收到消息量count:37 服务器接收到数据 hello,server75hello,server76
 * 服务器接收到消息量count:38 服务器接收到数据 hello,server77hello,server78hello,server79
 * 服务器接收到消息量count:39 服务器接收到数据 hello,server80hello,server81
 * 服务器接收到消息量count:40 服务器接收到数据 hello,server82hello,server83
 * 服务器接收到消息量count:41 服务器接收到数据 hello,server84
 * 服务器接收到消息量count:42 服务器接收到数据 hello,server85hello,server86
 * 服务器接收到消息量count:43 服务器接收到数据 hello,server87hello,server88
 * 服务器接收到消息量count:44 服务器接收到数据 hello,server89hello,server90
 * 服务器接收到消息量count:45 服务器接收到数据 hello,server91hello,server92
 * 服务器接收到消息量count:46 服务器接收到数据 hello,server93hello,server94
 * 服务器接收到消息量count:47 服务器接收到数据 hello,server95hello,server96hello,server97
 * 服务器接收到消息量count:48 服务器接收到数据 hello,server98hello,server99
 */
@Slf4j
public class TcpServerHandler extends SimpleChannelInboundHandler<ByteBuf> {

    int count;

    public TcpServerHandler() {
        log.info("TcpServerHandler");
    }

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception {
        byte[] buf = new byte[msg.readableBytes()];
        msg.readBytes(buf);

        String message = new String(buf, CharsetUtil.UTF_8);
        log.info("服务器接收到消息量count:" + (++count) + " 服务器接收到数据 " + message);

        ByteBuf resp = Unpooled.copiedBuffer(UUID.randomUUID().toString() + " ", CharsetUtil.UTF_8);
        ctx.writeAndFlush(resp);
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        cause.printStackTrace();
        ctx.close();
    }
}
